package br.com.foxinline.servico;

import br.com.foxinline.modelo.Bairro;
import br.com.foxinline.modelo.Cidade;
import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.Query;

/**
 *
 * @author cadomeireles
 */
@Stateless
public class BairroServico extends ServicoGenerico<Bairro> {
    
    public BairroServico() {
        super(Bairro.class);
    }

    @Override
    public void deletar(Bairro bairro) {
        bairro.setAtivo(false);        
        super.atualizar(bairro);
    }   
    
    public List<Bairro> pesquisar(Bairro bairro) {
        String sql = "select bairro from Bairro bairro where bairro.ativo = true";

        if (!bairro.getNome().isEmpty()) {
            sql += " and lower(bairro.nome) like '%" + bairro.getNome().toLowerCase().trim() + "%'";
        }

        if (bairro.getCidade() != null) {
            sql += " and bairro.cidade = :cidade";
        }        
        
        Query query = getEntityManager().createQuery(sql);

        if (bairro.getCidade() != null) {
            query.setParameter("cidade", bairro.getCidade());
        }        
        
        return query.getResultList();
    }    

    public List<Bairro> autocompletar(String texto, Cidade cidade){
        String sql = "select bairro from Bairro bairro where bairro.ativo = true";

        if (!texto.isEmpty()) {
            sql += " and lower(bairro.nome) like '%" + texto.toLowerCase().trim() + "%'";
        }

        if (cidade.getId() != null) {
            sql += " and bairro.cidade = :cidade";
        }
        
        Query query = getEntityManager().createQuery(sql);
        
        if (cidade.getId() != null) {
            query.setParameter("cidade", cidade);
        }

        return query.getResultList();
    }    
    
    public List<Bairro> autocompletar(String query){
        return buscarPeloNome(query);
    }

    public List<Bairro> buscarPeloNome(String query){
        List<Bairro> bairros = getEntityManager().createQuery("select bairro from " + Bairro.class.getSimpleName() + " bairro where bairro.ativo = true and lower(bairro.nome) like '%" + query.toLowerCase().trim() + "%'").getResultList();
        return bairros;
    }    
    
}
